import GCJ_CLASS_TYPE = require('./../../common/GCJ_CLASS_TYPE');
import ObjBase=require('./ObjBase');
import  DEFINE = require('./../../common/DEFINE');
import PageInfo=require('./../../common/PageInfo');
import ObjPosition=require('./../base/ObjPosition');
var CommonUtil=require('../../../../common/util/CommonUtil');
var FileDownLoader=require('../../../../common/util/FileDownLoader');
var async  = require( 'async'); // 同步控制
var fs = require('fs');
var path = require('path');
var exec=require('child_process').exec;
var CONFIG=require('../../../../common/config');

export  = ImageObj;
    

/**
 *
 * @author 
 *
 */
class ImageObj extends ObjBase{
    public source: string = "";
    public image: ObjPosition=new ObjPosition();
    
    public constructor(g?) {
        super(g);
        
        this.ct= GCJ_CLASS_TYPE.CLASS_TYPE_ImageObj;
	}
	
    // 从json对象(注意不是json字符串)中解析
    // 参数：self,true表示只拷贝自身数据，而不拷贝子的数据
    public fromJson(jsonObj,versionId,self?) {
        super.fromJson(jsonObj,versionId,self);
                
        this.source = jsonObj.source;
        
        if(jsonObj.hasOwnProperty("image")){
            this.image.fromJson(jsonObj.image, versionId);
        }
        
        // 加载文档时
        if (this.getGlobalData().docStatus() == DEFINE.DOC_STATUS_LOADING) {
            this.getGlobalData().objManager().saveObject( this );
        }
        
    }
    // 最小化TextExt转换成Json:所有页root对象只保留TextExtObj(且只保留fz\te\style\color\id\pos几个属性)
    public toJsonOfMinTextExt(): string {
        return this.toJson();
    }
    // 转成json字符串
    public toJson():string {
        // 去掉父json字符串的头尾
        var superJson = super.toJson();
        superJson = superJson.substr(1,superJson.length-2);
                
        var ret = '{';
        ret += superJson;
                    
        // source
        ret +=','; 
        ret += '"source":'+'"';
        ret += this.source+'"';
        
        // image
        ret+=',';
        ret+='"image":';
        ret+=this.image.toJson();
        
        ret+='}';
        return ret;
    }
	
    // 获取对象名称
    public getObjetName(): string {
        return "图片";
    }
    // 扩展大小
    // 参数：controlType 控制点类型
    // 参数：ratioX x缩放比例
    // 参数：ratioY y缩放比例
    // 参数：outside true表示操作所在的最外层对象，false表示内部对象
    public expand(controlType: number,ratioX: number,ratioY: number,outside: boolean) {
        super.expand(controlType,ratioX,ratioY,outside);

        if(this.constrain.scale==1) {
            this.image=this.pos.adjust(this.image.w,this.image.h);
        }
        
        // 如果是编组子对象[目前只在两个编辑器中需要以下处理，auto工程不需要]
        if(this.getGlobalData()&&this.getGlobalData().hasOwnProperty('selectManager')){
            var replaceItem=this.getGlobalData().selectManager().getPageOfSelect().getReplaceItem(this.id);
            if(replaceItem&&replaceItem instanceof SJGReplaceItemImage) {
                // 更新replaceItem
                var item: SJGReplaceItemImage=<SJGReplaceItemImage>replaceItem;
                item.pos.copy(this.pos);
                item.mask=this.mask.copy();
            } 
        }

    }
    
    // 缩放对象
    public scale(s: number) { 
        super.scale(s);
        
        this.image.multiply(s);
    }
    
    // 深度更新id［处理自身和子对象，递归］
    // 参数：idMaps，新旧id的对应关系, 例如：[{oldId:1,newId:2}]
    public deepResetId(idMaps: Array<any>) {
        super.deepResetId(idMaps);

    }
	
    //SJG_MARK_APPEND--------------------
    /* 检查数据的有效性.
     * 方式:GET
     * 参数:pc:1表示从pc来的请求/为空或者其它值表示从手机来的请求
     * 参数:docId:用户文档id
     * 返回:对象，属性如下：
     *          error:错误内容，null表示没有错误
     *          message:消息
     * */
    public validate() {
        var error = null;
        var message = '';
        if(typeof  this.source=="undefined" || this.source==null || this.source.length==0){
            error = "错误";
            message += ("id="+this.id+"图片地址为空\n");
        }

        return {error:error,message:message};
    }

}//SJG_MARK_END-------------------------
